library(tidyverse)
## ── Attaching packages ────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.1     ✓ purrr   0.3.4
## ✓ tibble  3.0.1     ✓ dplyr   1.0.0
## ✓ tidyr   1.1.0     ✓ stringr 1.4.0
## ✓ readr   1.3.1     ✓ forcats 0.5.0
## ── Conflicts ───────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(dplyr)
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
library(DT)
library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
usConfirmed_03_13 <- read_csv(url("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/03-13-2020.csv")) %>%
  rename(Country_Region = "Country/Region", Province_State = "Province/State") %>% 
  filter (Country_Region == "US") %>% 
  group_by(Province_State, Country_Region) %>% 
  summarise(Confirmed = sum(Confirmed)) 
## Parsed with column specification:
## cols(
##   `Province/State` = col_character(),
##   `Country/Region` = col_character(),
##   `Last Update` = col_datetime(format = ""),
##   Confirmed = col_double(),
##   Deaths = col_double(),
##   Recovered = col_double(),
##   Latitude = col_double(),
##   Longitude = col_double()
## )
## `summarise()` regrouping output by 'Province_State' (override with `.groups` argument)
usConfirmed_09_13 <-   read_csv(url("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/09-13-2020.csv")) %>% 
  filter (Country_Region == "US") %>% 
  group_by(Province_State, Country_Region) %>% 
  summarise(Confirmed = sum(Confirmed)) 
## Parsed with column specification:
## cols(
##   FIPS = col_double(),
##   Admin2 = col_character(),
##   Province_State = col_character(),
##   Country_Region = col_character(),
##   Last_Update = col_datetime(format = ""),
##   Lat = col_double(),
##   Long_ = col_double(),
##   Confirmed = col_double(),
##   Deaths = col_double(),
##   Recovered = col_double(),
##   Active = col_double(),
##   Combined_Key = col_character(),
##   Incidence_Rate = col_double(),
##   `Case-Fatality_Ratio` = col_double()
## )
## `summarise()` regrouping output by 'Province_State' (override with `.groups` argument)
setdiff(usConfirmed_09_13$Province_State, usConfirmed_03_13$Province_State)
## [1] "Guam"                     "Northern Mariana Islands"
## [3] "Puerto Rico"              "Recovered"               
## [5] "Virgin Islands"
usConfirmed_09_13 <- usConfirmed_09_13 %>% 
  filter(Province_State != "Recovered") 
usJoinedConfirmed <- full_join(usConfirmed_03_13, usConfirmed_09_13, by = c("Province_State")) %>%
  select("Province_State", "Confirmed.x", "Confirmed.y") %>%
  rename(confirmed_03_13 = "Confirmed.x", confirmed_09_13 = "Confirmed.y") %>%
  replace_na(list(confirmed_03_13 = 0))
usJoinedConfirmedLong <- usJoinedConfirmed %>%
  pivot_longer(-c(Province_State), names_to = "Date", values_to = "Confirmed")

long_plot <- ggplot(usJoinedConfirmedLong, aes(x = Confirmed,  y = Province_State)) +
  geom_point(aes(color = Date))

long_plot

tsLongConfirmed <- read_csv(url("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv")) %>%
  rename(Province_State = "Province/State", Country_Region = "Country/Region") %>%
  pivot_longer(-c(Province_State, Country_Region, Lat, Long), names_to = "Date", values_to = "Confirmed") 
## Parsed with column specification:
## cols(
##   .default = col_double(),
##   `Province/State` = col_character(),
##   `Country/Region` = col_character()
## )
## See spec(...) for full column specifications.
tsLongDeaths <- read_csv(url("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv")) %>%
  rename(Province_State = "Province/State", Country_Region = "Country/Region") %>%
  pivot_longer(-c(Province_State, Country_Region, Lat, Long), names_to = "Date", values_to = "Deaths")
## Parsed with column specification:
## cols(
##   .default = col_double(),
##   `Province/State` = col_character(),
##   `Country/Region` = col_character()
## )
## See spec(...) for full column specifications.
tsLongConfirmed <- tsLongConfirmed %>% 
  unite(Key, Province_State, Country_Region, Date, sep = ".", remove = FALSE)

tsLongDeaths_temp <- tsLongDeaths %>% 
  unite(Key, Province_State, Country_Region, Date, sep = ".", remove = FALSE) %>%
  select("Key", "Deaths")

tsLongUnited <- full_join(tsLongConfirmed, tsLongDeaths_temp, by = c("Key")) %>% 
  select(-Key)
tsLongUnited$Date <- mdy(tsLongUnited$Date)
tsLongUnitedCounts <- tsLongUnited %>% 
  pivot_longer(-c(Province_State, Country_Region, Lat, Long, Date),
               names_to = "Report_Type", values_to = "Counts")
tsLongUnited %>% 
  group_by(Country_Region,Date) %>% 
  summarise_at(c("Confirmed", "Deaths"), sum) %>% 
  filter (Country_Region == "US") %>% 
    ggplot(aes(x = Date,  y = Deaths)) + 
    geom_point() +
    geom_line() +
    ggtitle("US COVID-19 Deaths")

tsLongUnited %>% 
  group_by(Country_Region,Date) %>% 
  summarise_at(c("Confirmed", "Deaths"), sum) %>% 
  filter (Country_Region %in% c("China","Japan", "Korea, South", "Italy","Spain", "US")) %>% 
    ggplot(aes(x = Date,  y = Deaths)) + 
    geom_point() +
    geom_line() +
    ggtitle("COVID-19 Deaths") +
    facet_wrap(~Country_Region, ncol=2, scales="free_y")

tsLongUnited %>% 
    group_by(Country_Region,Date) %>% 
    summarise_at(c("Confirmed", "Deaths"), sum) %>% 
    filter (Country_Region %in% c("China","France","Italy", "Korea, South", "US")) %>% 
    ggplot(aes(x = Date,  y = Deaths, color = Country_Region)) + 
    geom_point() +
    geom_line() +
    ggtitle("COVID-19 Deaths")

tsLongUnitedCounts %>% 
  group_by(Country_Region, Report_Type, Date) %>% 
  summarise(Counts = sum(Counts)) %>% 
  filter (Country_Region == "US") %>% 
    ggplot(aes(x = Date,  y = log2(Counts), fill = Report_Type, color = Report_Type)) + 
    geom_point() +
    geom_line() +
    ggtitle("US COVID-19 Cases")
## `summarise()` regrouping output by 'Country_Region', 'Report_Type' (override with `.groups` argument)

usConfirmed_04_13 <- read_csv(url("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/04-13-2020.csv")) %>%
  filter (Country_Region == "US") %>% 
  group_by(Province_State, Country_Region) %>% 
  summarise(Confirmed = sum(Confirmed)) %>%
  filter(Province_State != "Recovered")
## Parsed with column specification:
## cols(
##   FIPS = col_double(),
##   Admin2 = col_character(),
##   Province_State = col_character(),
##   Country_Region = col_character(),
##   Last_Update = col_datetime(format = ""),
##   Lat = col_double(),
##   Long_ = col_double(),
##   Confirmed = col_double(),
##   Deaths = col_double(),
##   Recovered = col_double(),
##   Active = col_double(),
##   Combined_Key = col_character()
## )
## `summarise()` regrouping output by 'Province_State' (override with `.groups` argument)
usConfirmed_05_13 <- read_csv(url("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/05-13-2020.csv")) %>%
  filter (Country_Region == "US") %>% 
  group_by(Province_State, Country_Region) %>% 
  summarise(Confirmed = sum(Confirmed)) %>%
  filter(Province_State != "Recovered")
## Parsed with column specification:
## cols(
##   FIPS = col_double(),
##   Admin2 = col_character(),
##   Province_State = col_character(),
##   Country_Region = col_character(),
##   Last_Update = col_datetime(format = ""),
##   Lat = col_double(),
##   Long_ = col_double(),
##   Confirmed = col_double(),
##   Deaths = col_double(),
##   Recovered = col_double(),
##   Active = col_double(),
##   Combined_Key = col_character()
## )
## `summarise()` regrouping output by 'Province_State' (override with `.groups` argument)
usConfirmed_06_13 <- read_csv(url("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/06-13-2020.csv")) %>%
  filter (Country_Region == "US") %>% 
  group_by(Province_State, Country_Region) %>% 
  summarise(Confirmed = sum(Confirmed)) %>%
  filter(Province_State != "Recovered") 
## Parsed with column specification:
## cols(
##   FIPS = col_double(),
##   Admin2 = col_character(),
##   Province_State = col_character(),
##   Country_Region = col_character(),
##   Last_Update = col_datetime(format = ""),
##   Lat = col_double(),
##   Long_ = col_double(),
##   Confirmed = col_double(),
##   Deaths = col_double(),
##   Recovered = col_double(),
##   Active = col_double(),
##   Combined_Key = col_character(),
##   Incidence_Rate = col_double(),
##   `Case-Fatality_Ratio` = col_double()
## )
## `summarise()` regrouping output by 'Province_State' (override with `.groups` argument)
usConfirmed_07_13 <- read_csv(url("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/06-13-2020.csv")) %>%
  filter (Country_Region == "US") %>% 
  group_by(Province_State, Country_Region) %>% 
  summarise(Confirmed = sum(Confirmed)) %>%
  filter(Province_State != "Recovered")
## Parsed with column specification:
## cols(
##   FIPS = col_double(),
##   Admin2 = col_character(),
##   Province_State = col_character(),
##   Country_Region = col_character(),
##   Last_Update = col_datetime(format = ""),
##   Lat = col_double(),
##   Long_ = col_double(),
##   Confirmed = col_double(),
##   Deaths = col_double(),
##   Recovered = col_double(),
##   Active = col_double(),
##   Combined_Key = col_character(),
##   Incidence_Rate = col_double(),
##   `Case-Fatality_Ratio` = col_double()
## )
## `summarise()` regrouping output by 'Province_State' (override with `.groups` argument)
usConfirmed_08_13 <- read_csv(url("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/06-13-2020.csv")) %>%
  filter (Country_Region == "US") %>% 
  group_by(Province_State, Country_Region) %>% 
  summarise(Confirmed = sum(Confirmed)) %>%
  filter(Province_State != "Recovered")
## Parsed with column specification:
## cols(
##   FIPS = col_double(),
##   Admin2 = col_character(),
##   Province_State = col_character(),
##   Country_Region = col_character(),
##   Last_Update = col_datetime(format = ""),
##   Lat = col_double(),
##   Long_ = col_double(),
##   Confirmed = col_double(),
##   Deaths = col_double(),
##   Recovered = col_double(),
##   Active = col_double(),
##   Combined_Key = col_character(),
##   Incidence_Rate = col_double(),
##   `Case-Fatality_Ratio` = col_double()
## )
## `summarise()` regrouping output by 'Province_State' (override with `.groups` argument)
usJoinedConfirmed <- full_join(usJoinedConfirmed, usConfirmed_04_13, by = c("Province_State")) %>%
  rename(confirmed_04_13 = "Confirmed") %>%
  select(-Country_Region)
usJoinedConfirmed <- full_join(usJoinedConfirmed, usConfirmed_05_13, by = c("Province_State")) %>%
  rename(confirmed_05_13 = "Confirmed") %>%
  select(-Country_Region)
usJoinedConfirmed <- full_join(usJoinedConfirmed, usConfirmed_06_13, by = c("Province_State")) %>%
  rename(confirmed_06_13 = "Confirmed") %>%
  select(-Country_Region)
usJoinedConfirmed <- full_join(usJoinedConfirmed, usConfirmed_07_13, by = c("Province_State")) %>%
  rename(confirmed_07_13 = "Confirmed") %>%
  select(-Country_Region)
usJoinedConfirmed <- full_join(usJoinedConfirmed, usConfirmed_08_13, by = c("Province_State")) %>%
  rename(confirmed_08_13 = "Confirmed") %>%
  select(-Country_Region)
usJoinedConfirmedLongMonths <- usJoinedConfirmed %>%
  pivot_longer(-c(Province_State), names_to = "Date", values_to = "Confirmed") %>%
  arrange(desc(Province_State))

state_monthly_plot <- ggplot(usJoinedConfirmedLongMonths, aes(x = Confirmed,  y = Province_State)) +
  geom_point(aes(color = Date)) + ggtitle("Monthly Confirmed State Cases of Mar 13th - Sept 13th ") + xlab("Number of Confirmed Cases") + ylab("States")

state_monthly_plot

tsLongDeaths$Date <- mdy(tsLongDeaths$Date)
rtsLongDeaths <- tsLongDeaths %>%
  group_by(Date) %>%
  summarise(Deaths = sum(Deaths)) %>%
  arrange(Date) %>%
  ggplot(aes(x = Date, y = Deaths)) +
  geom_point() +
  geom_line() +
  ggtitle("Daily Worldwide Death Growth")
## `summarise()` ungrouping output (override with `.groups` argument)
rtsLongDeaths

tsLongUnited2 <- tsLongUnited %>%
  mutate(ratio = Deaths/Confirmed)
usDeathsRatio <- tsLongUnited2 %>%
  filter(Country_Region == "US") %>%
  filter(!is.na(ratio)) %>%
  ggplot(aes(x = Date, y = ratio)) +
  geom_point() +
  geom_line() +
  ggtitle("Daily Death to Cases Ratio in the US")

usDeathsRatio

countryDeaths <- tsLongDeaths %>%
  group_by(Country_Region) %>%
  summarise(Deaths = sum(Deaths)) %>%
  arrange(desc(Deaths)) %>%
  slice(1:10)
## `summarise()` ungrouping output (override with `.groups` argument)
countryDeaths
## # A tibble: 10 x 2
##    Country_Region   Deaths
##    <chr>             <dbl>
##  1 US             22711098
##  2 Brazil         11506250
##  3 United Kingdom  6450946
##  4 Italy           5977374
##  5 Mexico          5733990
##  6 India           5213446
##  7 France          5015175
##  8 Spain           4912421
##  9 Iran            2379885
## 10 Peru            2377876
mostDeathsTT <- tsLongUnited %>%
  filter(Country_Region %in% countryDeaths$Country_Region) %>%
  group_by(Date, Country_Region) %>%
  summarise_at("Deaths", sum) %>% 
  ggplot(aes(x = Date, y = Deaths, color = Country_Region)) +
  geom_point() +
  geom_line() +
  ggtitle("10 Nations with Highest Death Rates")

mostDeathsTT

mostDeathsTTF <- tsLongUnited %>%
  filter(Country_Region %in% countryDeaths$Country_Region) %>%
  group_by(Date, Country_Region) %>%
  summarise_at("Deaths", sum) %>% 
  ggplot(aes(x = Date, y = Deaths, color = Country_Region)) +
  geom_point() +
  geom_line() +
  ggtitle("10 Nations with Highest Death Rates") +
  facet_wrap(~Country_Region, ncol=2, scales="free_y")

mostDeathsTTF

tsLongConfirmedUS <- read_csv(url("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_US.csv")) %>%
  select(-c("UID", "iso2", "iso3", "code3",  "FIPS", "Admin2")) %>%
  pivot_longer(-c("Country_Region", "Lat", "Long_", "Combined_Key", "Province_State"), names_to = "Date", values_to = "Confirmed") %>%
  filter(Province_State != "Recovered")
## Parsed with column specification:
## cols(
##   .default = col_double(),
##   iso2 = col_character(),
##   iso3 = col_character(),
##   Admin2 = col_character(),
##   Province_State = col_character(),
##   Country_Region = col_character(),
##   Combined_Key = col_character()
## )
## See spec(...) for full column specifications.
tsLongConfirmedUS$Date <- mdy(tsLongConfirmedUS$Date)
tsLongConfirmedUS <- tsLongConfirmedUS %>%
  group_by(Province_State, Date) %>%
  summarise_at("Confirmed", sum)
ggplot(tsLongConfirmedUS, aes(x= Date, y = Confirmed, color = Province_State)) +
  geom_point() +
  geom_line() +
  ggtitle("Case Rates in the US States") +
  facet_wrap(~Province_State, ncol=5, scales="free_y")

mostDeathsTTF + theme_dark()

Application written in R (R Core Team 2015) using the Shiny framework (Chang et al. 2015).

REFERENCES

Chang, W., J. Cheng, JJ. Allaire, Y. Xie, and J. McPherson. 2015. “Shiny: Web Application Framework for R. R Package Version 0.12.1.” Computer Program. http://CRAN.R-project.org/package=shiny.

R Core Team. 2015. “R: A Language and Environment for Statistical Computing.” Journal Article. http://www.R-project.org.